#ifndef SNAKE_H
#define SNAKE_H

#include <QObject>
#include <QList>
#include <QPoint>

class Snake : public QObject
{
    Q_OBJECT
public:
    // 方向枚举
    enum Direction { Up, Down, Left, Right };
    
    // 构造函数：参数为游戏区域大小和步长
    explicit Snake(int gameWidth, int gameHeight, int stepSize, QObject *parent = nullptr);
    
    // 获取蛇头位置
    QPoint head() const { return m_head; }
    
    // 获取蛇身所有段
    QList<QPoint> body() const { return m_body; }
    
    // 获取当前方向（新增方法）
    Direction direction() const { return m_dir; }
    
    // 设置移动方向
    void setDirection(Direction dir);
    
    // 移动蛇
    void move();
    
    // 蛇增长（吃到食物时）
    void grow();
    
    // 检查是否碰撞到自身
    bool checkSelfCollision() const;
    
    // 重置蛇的状态
    void reset();

private:
    QPoint m_head;               // 蛇头位置
    QList<QPoint> m_body;        // 蛇身各段
    Direction m_dir;             // 当前方向
    Direction m_lastDir;         // 上一次方向（防止180度转向）

    int m_gameWidth;             // 游戏区域宽度
    int m_gameHeight;            // 游戏区域高度
    int m_stepSize;              // 步长
    bool m_needToGrow;           // 是否需要增长
};

#endif // SNAKE_H
